package gui.usuarios;

import conexao.Http;
import conexao.HttpData;
import conexao.HttpListener;
import gui.logado.mensagens.enviar.Enviar;
import java.io.DataInputStream;
import java.util.Vector;
import javax.microedition.lcdui.*;
import recados.Recados;

public class Usuarios extends List implements CommandListener, HttpListener {

    private final Command cmdVoltar;
    private final Command cmdAtualizar;
    private final Command cmdParar;
    private final Command cmdOnlines;
    private final Command cmdTodos;
    private final Command cmdPerfil;
    private boolean apenasonline;
    private Displayable back;
    private Http http;
    private Vector usuarios;
    private final Command cmdMensagem;

    public Usuarios() {
        super("Usuarios", IMPLICIT);

        cmdVoltar = new Command("Voltar", Command.BACK, 0);
        cmdAtualizar = new Command("Atualizar", Command.OK, 1);
        cmdMensagem = new Command("Enviar Mensagem", Command.SCREEN, 2);
        cmdPerfil = new Command("Perfil", Command.SCREEN, 3);
        cmdOnlines = new Command("Onlines", Command.SCREEN, 4);
        cmdTodos = new Command("Todos", Command.SCREEN, 5);
        cmdParar = new Command("Parar", Command.STOP, 6);

        addCommand(cmdVoltar);
        addCommand(cmdMensagem);
        addCommand(cmdAtualizar);
        addCommand(cmdTodos);

        setSelectCommand(cmdPerfil);
        apenasonline = true;

        setCommandListener(this);
        
        usuarios = new Vector();
    }

    public void carrega() {
        Image img_online = null;
        Image img_offline = null;

        try {
            img_online = Image.createImage("/gui/usuarios/online.png");
            img_offline = Image.createImage("/gui/usuarios/offline.png");
        } catch (Exception ex) {
        }
        int onlines = 0;
        int total = usuarios.size();

        deleteAll();

        for (int i = 0; i < usuarios.size(); i++) {
            Usuario usuario = (Usuario) usuarios.elementAt(i);

            if (usuario.isOnline()) {
                onlines++;
                append(usuario.getNome(), img_online);
            } else if (!apenasonline) {
                append(usuario.getNome(), img_offline);
            }
        }

        Recados midlet = Recados.getInstance();
        Image icone_user = midlet.getLoginMenu().getImage(1);

        midlet.getLoginMenu().set(1, "Usuarios (" + onlines + "/" + total + ")", icone_user);

        if (midlet.isLogado()) {
            midlet.getPrincipal().set(2, "Usuarios (" + onlines + "/" + total + ")", icone_user);
        }
    }

    public void commandAction(Command c, Displayable d) {
        if (c == cmdVoltar) {
            Recados.setCurrent(back);
        } else if (c == cmdAtualizar) {
          run();
        } else if (c == cmdParar) {
            http.cancela();
            removeCommand(cmdParar);
            addCommand(cmdAtualizar);
        } else if (c == cmdOnlines) {
            setApenasonline(true);
            removeCommand(cmdOnlines);
            addCommand(cmdTodos);
            carrega();
        } else if (c == cmdTodos) {
            setApenasonline(false);
            removeCommand(cmdTodos);
            addCommand(cmdOnlines);
            carrega();
        } else if (c == cmdPerfil) {
            if (getSelectedIndex() > -1) {
                Perfil p = new Perfil(getString(getSelectedIndex()));
                Recados.setCurrent(p);
                p.fetch();
            }
        } else if (c == cmdMensagem) {
            Recados midlet = Recados.getInstance();
            if (midlet.isLogado() && getSelectedIndex() > -1) {

                if (!(back instanceof Enviar)) {
                    midlet.getEnviar().setBack(this);
                    midlet.getEnviar().getMensagem().setString("");
                }

                midlet.getEnviar().getPara().setString(getString(getSelectedIndex()));
                Recados.setCurrent(midlet.getEnviar());
            }
        }
    }

    public void setBack(Displayable back) {
        this.back = back;
    }

    public void setApenasonline(boolean apenasonline) {
        this.apenasonline = apenasonline;
    }

    // * *********************** Atualizar Lista
    public void run() {
        HttpData dados = new HttpData();
        dados.setPagina("/usuarios.php");

        if (Recados.getInstance().isLogado()) {
            dados.put("nome", Recados.getInstance().getLoginConfig().getNome());
        }

        http = new Http("Baixando Lista");
        http.setListener(this);
        http.setHttpData(dados);

        removeCommand(cmdAtualizar);
        addCommand(cmdParar);

        http.doPost(true);
    }

    public void requisicaoConcluida(DataInputStream in) {
        String n_user = Http.readLine(in);

        usuarios.removeAllElements();

        if (n_user.equals("0")) {
            return;
        }

        int numero_usuarios = Integer.parseInt(n_user);

        int lido = 0;

        while (lido < numero_usuarios) {
            Usuario usurio = new Usuario(Integer.parseInt(Http.readLine(in)), Http.readLine(in), Http.readLine(in).equals("true"));
            usuarios.addElement(usurio);
            lido++;
        }

        carrega();

        removeCommand(cmdParar);
        addCommand(cmdAtualizar);

        Recados.getInstance().getUsuarios().carrega();
    }

    public void falhaRequisiçao(String mensagem) {
        removeCommand(cmdParar);
        addCommand(cmdAtualizar);

        if (Recados.getInstance().getConfig().isErros()) {
          Recados.setCurrent(new Alert("Erro", mensagem, null, AlertType.ERROR));
        }
    }

    public void requisicaoCancelada() {
        removeCommand(cmdParar);
        addCommand(cmdAtualizar);
    }
}
